package com.dhl.segregation;

/**
 * @title: Segregation1
 * @Author danghailiang
 * @Date: 2022/7/25 10:18
 * @Version 1.0
 */
public class Segregation1 {
    public static void main(String[] args) {
        Interface1 interfaceB = new B();
        Interface1 interfaceD = new D();
        A a = new A();
        a.method1(interfaceB);
        a.method2(interfaceB);
        a.method3(interfaceB);
        C c = new C();
        c.method1(interfaceB);
        c.method4(interfaceB);
        c.method5(interfaceB);
    }
}

/**
 * A 和 C 都只是使用了其中部分方法，并没有全部使用
 * B 和 D 中都有一些方法未被使用
 * 使用接口隔离进行拆解
 */
interface Interface1{
    void method1();
    void method2();
    void method3();
    void method4();
    void method5();
}
class D implements Interface1{

    @Override
    public void method1() {
        System.out.println("method1");
    }

    @Override
    public void method2() {
        System.out.println("method2");
    }

    @Override
    public void method3() {
        System.out.println("method3");
    }

    @Override
    public void method4() {
        System.out.println("method4");
    }

    @Override
    public void method5() {
        System.out.println("method5");
    }
}

class B implements Interface1{

    @Override
    public void method1() {
        System.out.println("method1");
    }

    @Override
    public void method2() {
        System.out.println("method2");
    }

    @Override
    public void method3() {
        System.out.println("method3");
    }

    @Override
    public void method4() {
        System.out.println("method4");
    }

    @Override
    public void method5() {
        System.out.println("method5");
    }
}
class A{

    public void method1(Interface1 i ) {
        i.method1();
    }


    public void method2(Interface1 i ) {
        i.method2();
    }


    public void method3(Interface1 i ) {
        i.method3();
    }
}
class C{

    public void method1(Interface1 i ) {
        i.method1();
    }


    public void method4(Interface1 i ) {
        i.method3();
    }


    public void method5(Interface1 i ) {
        i.method5();
    }
}